* pgpool: a language independent connection pool server for PostgreSQL
* written by Tatsuo Ishii
*
- * Copyright (c) 2003-2016 PgPool Global Development Group
+ * Copyright (c) 2003-2023 PgPool Global Development Group
*
* Permission to use, copy, modify, and distribute this software and
* its documentation for any purpose and without fee is hereby
relcache_lookup(TSRewriteContext * ctx)
{
#define ATTRDEFQUERY (Pgversion(ctx->backend)->major >= 73 ? \
- "SELECT attname, pg_get_expr(d.adbin, d.adrelid), coalesce((pg_get_expr(d.adbin, d.adrelid) LIKE '%%now()%%' OR pg_get_expr(d.adbin, d.adrelid) LIKE '%%''now''::text%%' OR" \
- " pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_TIMESTAMP%%' OR pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_TIME%%' OR pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_DATE%%' OR" \
- " pg_get_expr(d.adbin, d.adrelid) LIKE '%%LOCALTIME%%' OR pg_get_expr(d.adbin, d.adrelid) LIKE '%%LOCALTIMESTAMP%%')" \
- " AND (a.atttypid = 'timestamp'::regtype::oid OR" \
- " a.atttypid = 'timestamp with time zone'::regtype::oid OR" \
- " a.atttypid = 'date'::regtype::oid OR" \
- " a.atttypid = 'time'::regtype::oid OR" \
- " a.atttypid = 'time with time zone'::regtype::oid)" \
+ "SELECT attname, pg_catalog.pg_get_expr(d.adbin, d.adrelid), coalesce((pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%now()%%' OR pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%''now''::text%%' OR" \
+ " pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_TIMESTAMP%%' OR pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_TIME%%' OR pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_DATE%%' OR" \
+ " pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%LOCALTIME%%' OR pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%LOCALTIMESTAMP%%')" \
+ " AND (a.atttypid = 'timestamp'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'timestamp with time zone'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'date'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'time'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'time with time zone'::pg_catalog.regtype::pg_catalog.oid)" \
" , false)" \
" FROM pg_catalog.pg_class c, pg_catalog.pg_attribute a " \
" LEFT JOIN pg_catalog.pg_attrdef d ON (a.attrelid = d.adrelid AND a.attnum = d.adnum)" \
"SELECT attname, d.adsrc, coalesce((d.adsrc LIKE '%%now()%%' OR d.adsrc LIKE '%%''now''::text%%' OR" \
" d.adsrc LIKE '%%CURRENT_TIMESTAMP%%' OR d.adsrc LIKE '%%CURRENT_TIME%%' OR d.adsrc LIKE '%%CURRENT_DATE%%' OR" \
" d.adsrc LIKE '%%LOCALTIME%%' OR d.adsrc LIKE '%%LOCALTIMESTAMP%%')" \
- " AND (a.atttypid = 'timestamp'::regtype::oid OR" \
- " a.atttypid = 'timestamp with time zone'::regtype::oid OR" \
- " a.atttypid = 'date'::regtype::oid OR" \
- " a.atttypid = 'time'::regtype::oid OR" \
- " a.atttypid = 'time with time zone'::regtype::oid)" \
+ " AND (a.atttypid = 'timestamp'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'timestamp with time zone'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'date'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'time'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'time with time zone'::pg_catalog.regtype::pg_catalog.oid)" \
" , false)" \
" FROM pg_catalog.pg_class c, pg_catalog.pg_attribute a " \
" LEFT JOIN pg_catalog.pg_attrdef d ON (a.attrelid = d.adrelid AND a.attnum = d.adnum)" \
" ORDER BY a.attnum")
#define ATTRDEFQUERY2 (Pgversion(ctx->backend)->major >= 73 ? \
- "SELECT attname, pg_get_expr(d.adbin, d.adrelid), coalesce((pg_get_expr(d.adbin, d.adrelid) LIKE '%%now()%%' OR pg_get_expr(d.adbin, d.adrelid) LIKE '%%''now''::text%%' OR" \
- " pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_TIMESTAMP%%' OR pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_TIME%%' OR pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_DATE%%' OR" \
- " pg_get_expr(d.adbin, d.adrelid) LIKE '%%LOCALTIME%%' OR pg_get_expr(d.adbin, d.adrelid) LIKE '%%LOCALTIMESTAMP%%')" \
- " AND (a.atttypid = 'timestamp'::regtype::oid OR" \
- " a.atttypid = 'timestamp with time zone'::regtype::oid OR" \
- " a.atttypid = 'date'::regtype::oid OR" \
- " a.atttypid = 'time'::regtype::oid OR" \
- " a.atttypid = 'time with time zone'::regtype::oid)" \
+ "SELECT attname, pg_catalog.pg_get_expr(d.adbin, d.adrelid), coalesce((pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%now()%%' OR pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%''now''::text%%' OR" \
+ " pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_TIMESTAMP%%' OR pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_TIME%%' OR pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_DATE%%' OR" \
+ " pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%LOCALTIME%%' OR pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%LOCALTIMESTAMP%%')" \
+ " AND (a.atttypid = 'timestamp'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'timestamp with time zone'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'date'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'time'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'time with time zone'::pg_catalog.regtype::pg_catalog.oid)" \
" , false)" \
" FROM pg_catalog.pg_class c, pg_catalog.pg_attribute a " \
" LEFT JOIN pg_catalog.pg_attrdef d ON (a.attrelid = d.adrelid AND a.attnum = d.adnum)" \
"SELECT attname, d.adsrc, coalesce((d.adsrc LIKE '%%now()%%' OR d.adsrc LIKE '%%''now''::text%%' OR" \
" d.adsrc LIKE '%%CURRENT_TIMESTAMP%%' OR d.adsrc LIKE '%%CURRENT_TIME%%' OR d.adsrc LIKE '%%CURRENT_DATE%%' OR" \
" d.adsrc LIKE '%%LOCALTIME%%' OR d.adsrc LIKE '%%LOCALTIMESTAMP%%')" \
- " AND (a.atttypid = 'timestamp'::regtype::oid OR" \
- " a.atttypid = 'timestamp with time zone'::regtype::oid OR" \
- " a.atttypid = 'date'::regtype::oid OR" \
- " a.atttypid = 'time'::regtype::oid OR" \
- " a.atttypid = 'time with time zone'::regtype::oid)" \
+ " AND (a.atttypid = 'timestamp'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'timestamp with time zone'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'date'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'time'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'time with time zone'::pg_catalog.regtype::pg_catalog.oid)" \
" , false)" \
" FROM pg_catalog.pg_class c, pg_catalog.pg_attribute a " \
" LEFT JOIN pg_catalog.pg_attrdef d ON (a.attrelid = d.adrelid AND a.attnum = d.adnum)" \
" ORDER BY a.attnum")
#define ATTRDEFQUERY3 (Pgversion(ctx->backend)->major >= 73 ? \
- "SELECT attname, pg_get_expr(d.adbin, d.adrelid), coalesce((pg_get_expr(d.adbin, d.adrelid) LIKE '%%now()%%' OR pg_get_expr(d.adbin, d.adrelid) LIKE '%%''now''::text%%' OR" \
- " pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_TIMESTAMP%%' OR pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_TIME%%' OR pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_DATE%%' OR" \
- " pg_get_expr(d.adbin, d.adrelid) LIKE '%%LOCALTIME%%' OR pg_get_expr(d.adbin, d.adrelid) LIKE '%%LOCALTIMESTAMP%%')" \
- " AND (a.atttypid = 'timestamp'::regtype::oid OR" \
- " a.atttypid = 'timestamp with time zone'::regtype::oid OR" \
- " a.atttypid = 'date'::regtype::oid OR" \
- " a.atttypid = 'time'::regtype::oid OR" \
- " a.atttypid = 'time with time zone'::regtype::oid)" \
+ "SELECT attname, pg_catalog.pg_get_expr(d.adbin, d.adrelid), coalesce((pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%now()%%' OR pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%''now''::text%%' OR" \
+ " pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_TIMESTAMP%%' OR pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_TIME%%' OR pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%CURRENT_DATE%%' OR" \
+ " pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%LOCALTIME%%' OR pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%%LOCALTIMESTAMP%%')" \
+ " AND (a.atttypid = 'timestamp'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'timestamp with time zone'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'date'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'time'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'time with time zone'::pg_catalog.regtype::pg_catalog.oid)" \
" , false)" \
" FROM pg_catalog.pg_class c, pg_catalog.pg_attribute a " \
" LEFT JOIN pg_catalog.pg_attrdef d ON (a.attrelid = d.adrelid AND a.attnum = d.adnum)" \
- " WHERE c.oid = a.attrelid AND a.attnum >= 1 AND a.attisdropped = 'f' AND c.oid = to_regclass('%s')" \
+ " WHERE c.oid = a.attrelid AND a.attnum >= 1 AND a.attisdropped = 'f' AND c.oid = pg_catalog.to_regclass('%s')" \
" ORDER BY a.attnum" : \
"SELECT attname, d.adsrc, coalesce((d.adsrc LIKE '%%now()%%' OR d.adsrc LIKE '%%''now''::text%%' OR" \
" d.adsrc LIKE '%%CURRENT_TIMESTAMP%%' OR d.adsrc LIKE '%%CURRENT_TIME%%' OR d.adsrc LIKE '%%CURRENT_DATE%%' OR" \
" d.adsrc LIKE '%%LOCALTIME%%' OR d.adsrc LIKE '%%LOCALTIMESTAMP%%')" \
- " AND (a.atttypid = 'timestamp'::regtype::oid OR" \
- " a.atttypid = 'timestamp with time zone'::regtype::oid OR" \
- " a.atttypid = 'date'::regtype::oid OR" \
- " a.atttypid = 'time'::regtype::oid OR" \
- " a.atttypid = 'time with time zone'::regtype::oid)" \
+ " AND (a.atttypid = 'timestamp'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'timestamp with time zone'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'date'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'time'::pg_catalog.regtype::pg_catalog.oid OR" \
+ " a.atttypid = 'time with time zone'::pg_catalog.regtype::pg_catalog.oid)" \
" , false)" \
" FROM pg_catalog.pg_class c, pg_catalog.pg_attribute a " \
" LEFT JOIN pg_catalog.pg_attrdef d ON (a.attrelid = d.adrelid AND a.attnum = d.adnum)" \
- " WHERE c.oid = a.attrelid AND a.attnum >= 1 AND a.attisdropped = 'f' AND c.oid = to_regclass('%s')" \
+ " WHERE c.oid = a.attrelid AND a.attnum >= 1 AND a.attisdropped = 'f' AND c.oid = pg_catalog.to_regclass('%s')" \
" ORDER BY a.attnum")
char *query;
POOL_SELECT_RESULT *res;
static char timestamp[64];
- do_query(MAIN(backend), "SELECT now()", &res, MAJOR(backend));
+ do_query(MAIN(backend), "SELECT pg_catalog.now()", &res, MAJOR(backend));
if (res->numrows != 1)
{
* pgpool: a language independent connection pool server for PostgreSQL
* written by Tatsuo Ishii
*
- * Copyright (c) 2003-2021 PgPool Global Development Group
+ * Copyright (c) 2003-2023 PgPool Global Development Group
*
* Permission to use, copy, modify, and distribute this software and
* its documentation for any purpose and without fee is hereby
/*
* Query to know if the target table belongs pg_catalog schema.
*/
-#define ISBELONGTOPGCATALOGQUERY "SELECT count(*) FROM pg_class AS c, pg_namespace AS n WHERE c.relname = '%s' AND c.relnamespace = n.oid AND n.nspname = 'pg_catalog'"
+#define ISBELONGTOPGCATALOGQUERY "SELECT count(*) FROM pg_catalog.pg_class AS c, pg_namespace AS n WHERE c.relname = '%s' AND c.relnamespace = n.oid AND n.nspname = 'pg_catalog'"
-#define ISBELONGTOPGCATALOGQUERY2 "SELECT count(*) FROM pg_class AS c, pg_namespace AS n WHERE c.oid = pgpool_regclass('\"%s\"') AND c.relnamespace = n.oid AND n.nspname = 'pg_catalog'"
+#define ISBELONGTOPGCATALOGQUERY2 "SELECT count(*) FROM pg_catalog.pg_class AS c, pg_namespace AS n WHERE c.oid = pgpool_regclass('\"%s\"') AND c.relnamespace = n.oid AND n.nspname = 'pg_catalog'"
-#define ISBELONGTOPGCATALOGQUERY3 "SELECT count(*) FROM pg_class AS c, pg_namespace AS n WHERE c.oid = pg_catalog.to_regclass('\"%s\"') AND c.relnamespace = n.oid AND n.nspname = 'pg_catalog'"
+#define ISBELONGTOPGCATALOGQUERY3 "SELECT count(*) FROM pg_catalog.pg_class AS c, pg_namespace AS n WHERE c.oid = pg_catalog.to_regclass('\"%s\"') AND c.relnamespace = n.oid AND n.nspname = 'pg_catalog'"
bool result;
static POOL_RELCACHE * relcache;
/*
* Query to know if pgpool_regclass exists.
*/
-#define HASPGPOOL_REGCLASSQUERY "SELECT count(*) from (SELECT has_function_privilege('%s', 'pgpool_regclass(cstring)', 'execute') WHERE EXISTS(SELECT * FROM pg_catalog.pg_proc AS p WHERE p.proname = 'pgpool_regclass')) AS s"
+#define HASPGPOOL_REGCLASSQUERY "SELECT count(*) from (SELECT pg_catalog.has_function_privilege('%s', 'pgpool_regclass(cstring)', 'execute') WHERE EXISTS(SELECT * FROM pg_catalog.pg_proc AS p WHERE p.proname = 'pgpool_regclass')) AS s"
bool result;
static POOL_RELCACHE * relcache;
* Query to convert table name to oid
*/
#define TABLE_TO_OID_QUERY "SELECT pgpool_regclass('%s')"
-#define TABLE_TO_OID_QUERY2 "SELECT oid FROM pg_class WHERE relname = '%s'"
+#define TABLE_TO_OID_QUERY2 "SELECT oid FROM pg_catalog.pg_class WHERE relname = '%s'"
#define TABLE_TO_OID_QUERY3 "SELECT COALESCE(pg_catalog.to_regclass('%s')::oid, 0)"
int oid = 0;
/*
* Query to count the number of records matching given function name and type name.
*/
-#define FUNCTION_RETURN_TYPE_MATCHEING_QUERY "SELECT count(*) FROM pg_type AS t, pg_catalog.pg_proc AS p, pg_catalog.pg_namespace AS n WHERE p.proname = '%s' AND n.oid = p.pronamespace AND n.nspname %s '%s' AND p.prorettype = t.oid AND t.typname = '%s';"
+#define FUNCTION_RETURN_TYPE_MATCHEING_QUERY "SELECT count(*) FROM pg_catalog.pg_type AS t, pg_catalog.pg_proc AS p, pg_catalog.pg_namespace AS n WHERE p.proname = '%s' AND n.oid = p.pronamespace AND n.nspname %s '%s' AND p.prorettype = t.oid AND t.typname = '%s';"
bool result;
char query[1024];
char *rawstring = NULL;