1 /*------------------------------------------------------------------------- 2 * 3 * foreign.h 4 * support for foreign-data wrappers, servers and user mappings. 5 * 6 * 7 * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group 8 * 9 * src/include/foreign/foreign.h 10 * 11 *------------------------------------------------------------------------- 12 */ 13 #ifndef FOREIGN_H 14 #define FOREIGN_H 15 16 #include "nodes/parsenodes.h" 17 18 19 /* Helper for obtaining username for user mapping */ 20 #define MappingUserName(userid) \ 21 (OidIsValid(userid) ? GetUserNameFromId(userid, false) : "public") 22 23 24 typedef struct ForeignDataWrapper 25 { 26 Oid fdwid; /* FDW Oid */ 27 Oid owner; /* FDW owner user Oid */ 28 char *fdwname; /* Name of the FDW */ 29 Oid fdwhandler; /* Oid of handler function, or 0 */ 30 Oid fdwvalidator; /* Oid of validator function, or 0 */ 31 List *options; /* fdwoptions as DefElem list */ 32 } ForeignDataWrapper; 33 34 typedef struct ForeignServer 35 { 36 Oid serverid; /* server Oid */ 37 Oid fdwid; /* foreign-data wrapper */ 38 Oid owner; /* server owner user Oid */ 39 char *servername; /* name of the server */ 40 char *servertype; /* server type, optional */ 41 char *serverversion; /* server version, optional */ 42 List *options; /* srvoptions as DefElem list */ 43 } ForeignServer; 44 45 typedef struct UserMapping 46 { 47 Oid umid; /* Oid of user mapping */ 48 Oid userid; /* local user Oid */ 49 Oid serverid; /* server Oid */ 50 List *options; /* useoptions as DefElem list */ 51 } UserMapping; 52 53 typedef struct ForeignTable 54 { 55 Oid relid; /* relation Oid */ 56 Oid serverid; /* server Oid */ 57 List *options; /* ftoptions as DefElem list */ 58 } ForeignTable; 59 60 /* Flags for GetForeignServerExtended */ 61 #define FSV_MISSING_OK 0x01 62 63 /* Flags for GetForeignDataWrapperExtended */ 64 #define FDW_MISSING_OK 0x01 65 66 67 extern ForeignServer *GetForeignServer(Oid serverid); 68 extern ForeignServer *GetForeignServerExtended(Oid serverid, 69 bits16 flags); 70 extern ForeignServer *GetForeignServerByName(const char *name, bool missing_ok); 71 extern UserMapping *GetUserMapping(Oid userid, Oid serverid); 72 extern ForeignDataWrapper *GetForeignDataWrapper(Oid fdwid); 73 extern ForeignDataWrapper *GetForeignDataWrapperExtended(Oid fdwid, 74 bits16 flags); 75 extern ForeignDataWrapper *GetForeignDataWrapperByName(const char *name, 76 bool missing_ok); 77 extern ForeignTable *GetForeignTable(Oid relid); 78 79 extern List *GetForeignColumnOptions(Oid relid, AttrNumber attnum); 80 81 extern Oid get_foreign_data_wrapper_oid(const char *fdwname, bool missing_ok); 82 extern Oid get_foreign_server_oid(const char *servername, bool missing_ok); 83 84 #endif /* FOREIGN_H */ 85