agora inbox for [email protected]help / color / mirror / Atom feed
[PATCH v5 3/6] Handle pg_get_indexdef default args in system_functions.sql 1036+ messages / 2 participants [nested] [flat]
* [PATCH v5 3/6] Handle pg_get_indexdef default args in system_functions.sql @ 2025-12-09 18:02 Mark Wong <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Mark Wong @ 2025-12-09 18:02 UTC (permalink / raw) Modernize pg_get_indexdef to use proargdefaults to handle the optional column and pretty argument. --- src/backend/utils/adt/ruleutils.c | 20 -------------------- src/include/catalog/pg_proc.dat | 6 ++---- 2 files changed, 2 insertions(+), 24 deletions(-) diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 24c59510672..77a7b0ca769 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -1125,26 +1125,6 @@ pg_get_triggerdef_worker(Oid trigid, bool pretty) */ Datum pg_get_indexdef(PG_FUNCTION_ARGS) -{ - Oid indexrelid = PG_GETARG_OID(0); - int prettyFlags; - char *res; - - prettyFlags = PRETTYFLAG_INDENT; - - res = pg_get_indexdef_worker(indexrelid, 0, NULL, - false, false, - false, false, - prettyFlags, true); - - if (res == NULL) - PG_RETURN_NULL(); - - PG_RETURN_TEXT_P(string_to_text(res)); -} - -Datum -pg_get_indexdef_ext(PG_FUNCTION_ARGS) { Oid indexrelid = PG_GETARG_OID(0); int32 colno = PG_GETARG_INT32(1); diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index c1b945cdae5..1dc0d01cc85 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -3978,9 +3978,6 @@ { oid => '1642', descr => 'role name by OID (with fallback)', proname => 'pg_get_userbyid', provolatile => 's', prorettype => 'name', proargtypes => 'oid', prosrc => 'pg_get_userbyid' }, -{ oid => '1643', descr => 'index description', - proname => 'pg_get_indexdef', provolatile => 's', prorettype => 'text', - proargtypes => 'oid', prosrc => 'pg_get_indexdef' }, { oid => '3415', descr => 'extended statistics object description', proname => 'pg_get_statisticsobjdef', provolatile => 's', prorettype => 'text', proargtypes => 'oid', @@ -8592,7 +8589,8 @@ { oid => '2507', descr => 'index description (full create statement or single expression) with pretty-print option', proname => 'pg_get_indexdef', provolatile => 's', prorettype => 'text', - proargtypes => 'oid int4 bool', prosrc => 'pg_get_indexdef_ext' }, + proargtypes => 'oid int4 bool', proargnames => '{index,column,pretty}', + proargdefaults => '{0,false}', prosrc => 'pg_get_indexdef' }, { oid => '2508', descr => 'constraint description with pretty-print option', proname => 'pg_get_constraintdef', provolatile => 's', prorettype => 'text', proargtypes => 'oid bool', prosrc => 'pg_get_constraintdef_ext' }, -- 2.52.0 --m23X5uHFNxthGTU3 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=v5-0004-Handle-pg_get_constraintdef-default-args-in-syste.patch ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1036+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1036+ messages in thread
end of thread, other threads:[~2026-05-14 03:05 UTC | newest] Thread overview: 1036+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2025-12-09 18:02 [PATCH v5 3/6] Handle pg_get_indexdef default args in system_functions.sql Mark Wong <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox