Always qualify relation names.

Due to change at PostgreSQL 10.3, 9.6.8, 9.5.12, 9.4.17 and 9.3.22,
relation names passed by PostgreSQL function such as
pg_get_indexdef_string() are schema-qualified, which could be cause
of a parse error.
This commit is contained in:
Masahiko Sawada 2018-03-09 10:53:43 +09:00
parent bf61feefc4
commit 2f6196d654

View File

@ -354,11 +354,27 @@ get_relation_name(Oid relid)
Oid nsp = get_rel_namespace(relid);
char *nspname;
/*
* Relation names given by PostgreSQL core are always
* qualified since some minor releases.
*/
#if ((PG_VERSION_NUM >= 100000 && PG_VERSION_NUM < 100003) || \
(PG_VERSION_NUM >= 90600 && PG_VERSION_NUM < 90608) || \
(PG_VERSION_NUM >= 90500 && PG_VERSION_NUM < 90512) || \
(PG_VERSION_NUM >= 90400 && PG_VERSION_NUM < 90417) || \
(PG_VERSION_NUM >= 90300 && PG_VERSION_NUM < 90322))
/* Qualify the name if not visible in search path */
if (RelationIsVisible(relid))
nspname = NULL;
else
nspname = get_namespace_name(nsp);
#else
/* Qualify the name */
if (OidIsValid(nsp))
nspname = get_namespace_name(nsp);
else
nspname = NULL;
#endif
return quote_qualified_identifier(nspname, get_rel_name(relid));
}