78 foreach(cell, options_list)
92 for (opt = postgres_fdw_options; opt->
keyword; opt++)
100 (
errcode(ERRCODE_FDW_INVALID_OPTION_NAME),
102 errhint(
"Valid options in this context are: %s",
109 if (strcmp(def->
defname,
"use_remote_estimate") == 0 ||
110 strcmp(def->
defname,
"updatable") == 0)
115 else if (strcmp(def->
defname,
"fdw_startup_cost") == 0 ||
116 strcmp(def->
defname,
"fdw_tuple_cost") == 0)
123 if (*endp || val < 0)
125 (
errcode(ERRCODE_SYNTAX_ERROR),
126 errmsg(
"%s requires a non-negative numeric value",
129 else if (strcmp(def->
defname,
"extensions") == 0)
134 else if (strcmp(def->
defname,
"fetch_size") == 0)
141 (
errcode(ERRCODE_SYNTAX_ERROR),
142 errmsg(
"%s requires a non-negative integer value",
183 if (postgres_fdw_options)
196 (
errcode(ERRCODE_FDW_OUT_OF_MEMORY),
198 errdetail(
"could not get libpq's default connection options")));
202 for (lopt = libpq_options; lopt->
keyword; lopt++)
216 sizeof(non_libpq_options));
217 if (postgres_fdw_options ==
NULL)
219 (
errcode(ERRCODE_FDW_OUT_OF_MEMORY),
220 errmsg(
"out of memory")));
223 for (lopt = libpq_options; lopt->
keyword; lopt++)
227 strcmp(lopt->
keyword,
"fallback_application_name") == 0 ||
228 strcmp(lopt->
keyword,
"client_encoding") == 0)
248 memcpy(popt, non_libpq_options,
sizeof(non_libpq_options));
260 Assert(postgres_fdw_options);
262 for (opt = postgres_fdw_options; opt->
keyword; opt++)
279 Assert(postgres_fdw_options);
281 for (opt = postgres_fdw_options; opt->
keyword; opt++)
306 foreach(lc, defelems)
338 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
339 errmsg(
"parameter \"%s\" must be a list of extension names",
345 const char *extension_name = (
const char *)
lfirst(lc);
350 extensionOids =
lappend_oid(extensionOids, extension_oid);
352 else if (warnOnMissing)
355 (
errcode(ERRCODE_UNDEFINED_OBJECT),
356 errmsg(
"extension \"%s\" is not installed",
362 return extensionOids;
PG_FUNCTION_INFO_V1(postgres_fdw_validator)
int errhint(const char *fmt,...)
#define PG_GETARG_DATUM(n)
char * pstrdup(const char *in)
static bool is_valid_option(const char *keyword, Oid context)
#define AttributeRelationId
int errcode(int sqlerrcode)
List * lappend_oid(List *list, Oid datum)
#define OidIsValid(objectId)
static PgFdwOption * postgres_fdw_options
struct PgFdwOption PgFdwOption
bool defGetBoolean(DefElem *def)
int ExtractConnectionOptions(List *defelems, const char **keywords, const char **values)
void appendStringInfo(StringInfo str, const char *fmt,...)
char * defGetString(DefElem *def)
List * ExtractExtensionList(const char *extensionsString, bool warnOnMissing)
bool SplitIdentifierString(char *rawstring, char separator, List **namelist)
int errdetail(const char *fmt,...)
#define ereport(elevel, rest)
void initStringInfo(StringInfo str)
List * untransformRelOptions(Datum options)
Datum postgres_fdw_validator(PG_FUNCTION_ARGS)
#define ForeignServerRelationId
#define Assert(condition)
PQconninfoOption * PQconndefaults(void)
static Datum values[MAXATTR]
Oid get_extension_oid(const char *extname, bool missing_ok)
int errmsg(const char *fmt,...)
#define UserMappingRelationId
void list_free(List *list)
#define ForeignTableRelationId
static bool is_libpq_option(const char *keyword)
static PQconninfoOption * libpq_options
static void InitPgFdwOptions(void)