#author("2017-05-13T00:42:05+09:00","","")
[[PostgreSQL/開発]]
[[view source on doxygen.postgresql.org>https://doxygen.postgresql.org/foreign_8c_source.html]]
* サンプルプログラム [#hacf4189]
#geshi(c){{
#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));
}
}}