PostgreSQL/開発
概要 †
- Foreign Data Wrapper,Foreign Server,User Mappingなどに関する機能
定義 †
マクロ †
MappingUserName †
MappingUserName(userid)
- ユーザマッピングのユーザ名を取得するヘルパー
- useridが存在しない場合は,ERRORになる
- useridが不正値ならば"public"
列挙型 †
構造体 †
ForeignDataWrapper †
番号 | データ型 | フィールド | 説明 |
---|
1 | Oid | fdwid | FDWのoid |
2 | Oid | owner | FDW所有者のoid |
3 | char* | fdwname | FDWの識別名 |
4 | Oid | fdwhandler | handler関数のoid,定義がない場合は0 |
5 | Oid | fdwvalidator | validator関数のoid,定義がない場合は0 |
6 | List* | options | FDWオプションのリスト(DefElem) |
ForeignServer †
番号 | データ型 | フィールド | 説明 |
---|
1 | Oid | serverid | サーバのoid |
2 | Oid | fdwid | FDWのoid |
3 | Oid | owner | サーバ所有者のoid |
4 | Oid | servername | サーバ名 |
5 | Oid | servertype | サーバタイプ |
6 | Oid | serverversion | サーバのバージョン |
7 | List* | options | サーバオプションのリスト(DefElem) |
UserMapping †
番号 | データ型 | フィールド | 説明 |
---|
1 | Oid | userid | ローカルユーザのoid |
2 | Oid | serverid | サーバのoid |
3 | List* | options | UserMappingオプションのリスト(DefElem) |
ForeignTable †
番号 | データ型 | フィールド | 説明 |
---|
1 | Oid | relid | リレーションのoid |
2 | Oid | serverid | サーバのoid |
3 | List* | options | ForeignTableオプションのリスト(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);
- Foreign Data Wrapper情報を取得する
GetForeignDataWrapperByName †
// 引数1:Foreign Data Wrapperの名前
// 引数2:falseの場合,Foreign Data Wrapperが見つからないとERRORになる
extern ForeignDataWrapper *GetForeignDataWrapperByName(const char *name, bool missing_ok);
- Foreign Data Wrapper情報を識別名から取得する
GetForeignTable †
// 引数1:テーブルのoid
extern ForeignTable *GetForeignTable(Oid relid);
GetForeignColumnOptions †
// 引数1:テーブルのoid
// 引数2:属性の番号(1から始まる)
extern List *GetForeignColumnOptions(Oid relid, AttrNumber attnum);
- 外部テーブルの属性オプション情報を取得する
- 戻り値は,untransformRelOptions()関数でDefElem型のリストとして返される
参考 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);
- Foreign Data Wrapper情報を取得する
- GetForeignDataWrapperByName()の内部で呼ばれる。
get_foreign_server_oid †
// 引数1:外部サーバの名前
// 引数2:falseの場合,外部サーバが見つからないとERRORになる
extern Oid get_foreign_server_oid(const char *servername, bool missing_ok);
- 外部サーバ情報を取得する
- GetForeignServerByName()の内部で呼ばれる。
サンプルプログラム †
#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));
}
参考・関連 †
コメント †