PostgreSQL/開発

概要

定義

マクロ

MappingUserName

MappingUserName(userid)

列挙型

構造体

ForeignDataWrapper

番号データ型フィールド説明
1OidfdwidFDWのoid
2OidownerFDW所有者のoid
3char*fdwnameFDWの識別名
4Oidfdwhandlerhandler関数のoid,定義がない場合は0
5Oidfdwvalidatorvalidator関数のoid,定義がない場合は0
6List*optionsFDWオプションのリスト(DefElem)

ForeignServer

番号データ型フィールド説明
1Oidserveridサーバのoid
2OidfdwidFDWのoid
3Oidownerサーバ所有者のoid
4Oidservernameサーバ名
5Oidservertypeサーバタイプ
6Oidserverversionサーバのバージョン
7List*optionsサーバオプションのリスト(DefElem)

UserMapping

番号データ型フィールド説明
1Oiduseridローカルユーザのoid
2Oidserveridサーバのoid
3List*optionsUserMappingオプションのリスト(DefElem)

ForeignTable

番号データ型フィールド説明
1Oidrelidリレーションのoid
2Oidserveridサーバのoid
3List*optionsForeignTableオプションのリスト(DefElem)

関数

GetForeignServer

// 引数1:外部サーバのoid
extern ForeignServer *GetForeignServer(Oid serverid);

GetForeignServerByName

// 引数1:外部サーバの名前
// 引数2:falseの場合,外部サーバが見つからないとERRORになる
extern ForeignServer *GetForeignServerByName(const char *name , bool missing_ok);

GetUserMapping

// 引数1:ユーザのoid
// 引数2:外部サーバのoid
extern UserMapping *GetUserMapping(Oid userid, Oid serverid);

GetForeignDataWrapper

// 引数1:Foreign Data Wrapperのoid
extern ForeignDataWrapper *GetForeignDataWrapper(Oid fdwid);

GetForeignDataWrapperByName

// 引数1:Foreign Data Wrapperの名前
// 引数2:falseの場合,Foreign Data Wrapperが見つからないとERRORになる
extern ForeignDataWrapper *GetForeignDataWrapperByName(const char *name, bool missing_ok);

GetForeignTable

// 引数1:テーブルのoid
extern ForeignTable *GetForeignTable(Oid relid);

GetForeignColumnOptions

// 引数1:テーブルのoid
// 引数2:属性の番号(1から始まる)
extern List *GetForeignColumnOptions(Oid relid, AttrNumber attnum);

 参考  untransformRelOptions - on oxygen.postgresql.org

get_foreign_data_wrapper_oid

// 引数1:Foreign Data Wrapperの名前
// 引数2:falseの場合,Foreign Data Wrapperが見つからないとERRORになる
extern Oid get_foreign_data_wrapper_oid(const char *fdwname, bool missing_ok);

get_foreign_server_oid

// 引数1:外部サーバの名前
// 引数2:falseの場合,外部サーバが見つからないとERRORになる
extern Oid get_foreign_server_oid(const char *servername, bool missing_ok);

サンプルプログラム

#include "foreign/foreign.h"
/*
[Sample]
  CREATE SERVER postgres_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'foo', dbname 'foodb', port '5432');
  CREATE USER MAPPING FOR PUBLIC SERVER postgres_server OPTIONS (...);
  CREATE FOREIGN TABLE T (....) SERVER postgres_server
      OPTIONS (table_name 'warehouse', schema_name 'sales');
 */

ListCell *lc;

// 外部テーブル情報取得
ForeignTable *table = GetForeignTable(foreigntableid);
foreach(lc, table->options)
{
    DefElem *def = (DefElem*)lfirst(lc);
    elog(NOTICE, "%s = %s", def->defname, defGetString(def));
}

// server情報取得
ForeignServer *server = GetForeignServer(table->serverid);
elog(NOTICE, "servername = %s", server->servername);
foreach(lc, server->options)
{
    DefElem *def = (DefElem*)lfirst(lc);
    elog(NOTICE, "%s = %s", def->defname, defGetString(def));
}

// ForeignDataWrapper情報取得
ForeignDataWrapper *wrapper = GetForeignDataWrapper(server->fdwid);
elog(NOTICE, "fdwname = %s", wrapper->fdwname);
foreach(lc, wrapper->options)
{
    DefElem *def = (DefElem*)lfirst(lc);
    elog(NOTICE, "%s = %s", def->defname, defGetString(def));
}

// UserMapping情報取得
UserMapping *mapping = GetUserMapping(wrapper->owner, server->serverid);
elog(NOTICE, "serverid = %d, userid = %d", mapping->serverid, mapping->userid);
foreach(lc, mapping->options)
{
    DefElem *def = (DefElem*)lfirst(lc);
    elog(NOTICE, "%s = %s", def->defname, defGetString(def));
}

参考・関連

コメント



トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
目次
ダブルクリックで閉じるTOP | 閉じる
GO TO TOP