2008-12-19 11:25:19 -05:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* foreign.h
|
|
|
|
|
* support for foreign-data wrappers, servers and user mappings.
|
|
|
|
|
*
|
|
|
|
|
*
|
2026-01-01 13:24:10 -05:00
|
|
|
* Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
|
2008-12-19 11:25:19 -05:00
|
|
|
*
|
2010-09-20 16:08:53 -04:00
|
|
|
* src/include/foreign/foreign.h
|
2008-12-19 11:25:19 -05:00
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
#ifndef FOREIGN_H
|
|
|
|
|
#define FOREIGN_H
|
|
|
|
|
|
|
|
|
|
#include "nodes/parsenodes.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Helper for obtaining username for user mapping */
|
|
|
|
|
#define MappingUserName(userid) \
|
2015-05-09 13:06:49 -04:00
|
|
|
(OidIsValid(userid) ? GetUserNameFromId(userid, false) : "public")
|
2008-12-19 11:25:19 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct ForeignDataWrapper
|
|
|
|
|
{
|
|
|
|
|
Oid fdwid; /* FDW Oid */
|
|
|
|
|
Oid owner; /* FDW owner user Oid */
|
|
|
|
|
char *fdwname; /* Name of the FDW */
|
2011-02-19 00:06:18 -05:00
|
|
|
Oid fdwhandler; /* Oid of handler function, or 0 */
|
|
|
|
|
Oid fdwvalidator; /* Oid of validator function, or 0 */
|
2008-12-19 11:25:19 -05:00
|
|
|
List *options; /* fdwoptions as DefElem list */
|
|
|
|
|
} ForeignDataWrapper;
|
|
|
|
|
|
|
|
|
|
typedef struct ForeignServer
|
|
|
|
|
{
|
|
|
|
|
Oid serverid; /* server Oid */
|
|
|
|
|
Oid fdwid; /* foreign-data wrapper */
|
|
|
|
|
Oid owner; /* server owner user Oid */
|
|
|
|
|
char *servername; /* name of the server */
|
|
|
|
|
char *servertype; /* server type, optional */
|
|
|
|
|
char *serverversion; /* server version, optional */
|
|
|
|
|
List *options; /* srvoptions as DefElem list */
|
|
|
|
|
} ForeignServer;
|
|
|
|
|
|
|
|
|
|
typedef struct UserMapping
|
|
|
|
|
{
|
Avoid multiple foreign server connections when all use same user mapping.
Previously, postgres_fdw's connection cache was keyed by user OID and
server OID, but this can lead to multiple connections when it's not
really necessary. In particular, if all relevant users are mapped to
the public user mapping, then their connection options are certainly
the same, so one connection can be used for all of them.
While we're cleaning things up here, drop the "server" argument to
GetConnection(), which isn't really needed. This saves a few cycles
because callers no longer have to look this up; the function itself
does, but only when establishing a new connection, not when reusing
an existing one.
Ashutosh Bapat, with a few small changes by me.
2016-01-28 12:05:19 -05:00
|
|
|
Oid umid; /* Oid of user mapping */
|
2008-12-19 11:25:19 -05:00
|
|
|
Oid userid; /* local user Oid */
|
|
|
|
|
Oid serverid; /* server Oid */
|
|
|
|
|
List *options; /* useoptions as DefElem list */
|
|
|
|
|
} UserMapping;
|
|
|
|
|
|
2011-02-20 00:17:18 -05:00
|
|
|
typedef struct ForeignTable
|
|
|
|
|
{
|
|
|
|
|
Oid relid; /* relation Oid */
|
|
|
|
|
Oid serverid; /* server Oid */
|
|
|
|
|
List *options; /* ftoptions as DefElem list */
|
|
|
|
|
} ForeignTable;
|
|
|
|
|
|
2018-12-13 18:59:35 -05:00
|
|
|
/* Flags for GetForeignServerExtended */
|
|
|
|
|
#define FSV_MISSING_OK 0x01
|
|
|
|
|
|
|
|
|
|
/* Flags for GetForeignDataWrapperExtended */
|
|
|
|
|
#define FDW_MISSING_OK 0x01
|
|
|
|
|
|
2008-12-19 11:25:19 -05:00
|
|
|
|
|
|
|
|
extern ForeignServer *GetForeignServer(Oid serverid);
|
2018-12-13 18:59:35 -05:00
|
|
|
extern ForeignServer *GetForeignServerExtended(Oid serverid,
|
|
|
|
|
bits16 flags);
|
2022-09-20 16:09:30 -04:00
|
|
|
extern ForeignServer *GetForeignServerByName(const char *srvname,
|
|
|
|
|
bool missing_ok);
|
2008-12-19 11:25:19 -05:00
|
|
|
extern UserMapping *GetUserMapping(Oid userid, Oid serverid);
|
|
|
|
|
extern ForeignDataWrapper *GetForeignDataWrapper(Oid fdwid);
|
2018-12-13 18:59:35 -05:00
|
|
|
extern ForeignDataWrapper *GetForeignDataWrapperExtended(Oid fdwid,
|
|
|
|
|
bits16 flags);
|
2022-09-20 16:09:30 -04:00
|
|
|
extern ForeignDataWrapper *GetForeignDataWrapperByName(const char *fdwname,
|
2008-12-19 11:25:19 -05:00
|
|
|
bool missing_ok);
|
2011-02-20 00:17:18 -05:00
|
|
|
extern ForeignTable *GetForeignTable(Oid relid);
|
2008-12-19 11:25:19 -05:00
|
|
|
|
2012-03-07 18:20:58 -05:00
|
|
|
extern List *GetForeignColumnOptions(Oid relid, AttrNumber attnum);
|
|
|
|
|
|
2011-04-01 11:28:28 -04:00
|
|
|
extern Oid get_foreign_data_wrapper_oid(const char *fdwname, bool missing_ok);
|
|
|
|
|
extern Oid get_foreign_server_oid(const char *servername, bool missing_ok);
|
|
|
|
|
|
2008-12-19 11:25:19 -05:00
|
|
|
#endif /* FOREIGN_H */
|