From 2f6196d6546dc884c4b907bd80388f632ab4694f Mon Sep 17 00:00:00 2001 From: Masahiko Sawada Date: Fri, 9 Mar 2018 10:53:43 +0900 Subject: [PATCH] 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. --- lib/repack.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/repack.c b/lib/repack.c index 43f7e80..801ff8d 100644 --- a/lib/repack.c +++ b/lib/repack.c @@ -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)); }