agora inbox for [email protected]help / color / mirror / Atom feed
Minor improvement to partition_bounds_copy() 1039+ messages / 4 participants [nested] [flat]
* Minor improvement to partition_bounds_copy() @ 2020-02-20 11:36 Etsuro Fujita <[email protected]> 0 siblings, 1 reply; 1039+ messages in thread From: Etsuro Fujita @ 2020-02-20 11:36 UTC (permalink / raw) To: PostgreSQL Hackers <[email protected]> partition_bounds_copy() sets the hash_part and natts variable in each iteration of a loop to copy the datums in the datums array, which would not be efficient. Attached is small patch for avoiding that. Best regards, Etsuro Fujita Attachments: [application/octet-stream] partition_bounds_copy.patch (1.1K, ../../CAPmGK14Rvxrm8DHWvCjdoks6nwZuHBPvMnWZ6rkEx2KhFeEoPQ@mail.gmail.com/2-partition_bounds_copy.patch) download | inline diff: diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index 2d61c3f6e3..54eb83a0d1 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -789,6 +789,8 @@ partition_bounds_copy(PartitionBoundInfo src, int ndatums; int partnatts; int num_indexes; + bool hash_part; + int natts; dest = (PartitionBoundInfo) palloc(sizeof(PartitionBoundInfoData)); @@ -819,17 +821,17 @@ partition_bounds_copy(PartitionBoundInfo src, else dest->kind = NULL; + /* + * For hash partitioning, datums array will have two elements - modulus and + * remainder. + */ + hash_part = (key->strategy == PARTITION_STRATEGY_HASH); + natts = hash_part ? 2 : partnatts; + for (i = 0; i < ndatums; i++) { int j; - /* - * For a corresponding hash partition, datums array will have two - * elements - modulus and remainder. - */ - bool hash_part = (key->strategy == PARTITION_STRATEGY_HASH); - int natts = hash_part ? 2 : partnatts; - dest->datums[i] = (Datum *) palloc(sizeof(Datum) * natts); for (j = 0; j < natts; j++) ^ permalink raw reply [nested|flat] 1039+ messages in thread
* Re: Minor improvement to partition_bounds_copy() @ 2020-02-20 12:38 Amit Langote <[email protected]> parent: Etsuro Fujita <[email protected]> 0 siblings, 1 reply; 1039+ messages in thread From: Amit Langote @ 2020-02-20 12:38 UTC (permalink / raw) To: Etsuro Fujita <[email protected]>; +Cc: PostgreSQL Hackers <[email protected]> Fujita-san, On Thu, Feb 20, 2020 at 8:36 PM Etsuro Fujita <[email protected]> wrote: > partition_bounds_copy() sets the hash_part and natts variable in each > iteration of a loop to copy the datums in the datums array, which > would not be efficient. Attached is small patch for avoiding that. That looks good to me. Thanks, Amit ^ permalink raw reply [nested|flat] 1039+ messages in thread
* Re: Minor improvement to partition_bounds_copy() @ 2020-02-20 13:52 Julien Rouhaud <[email protected]> parent: Amit Langote <[email protected]> 0 siblings, 1 reply; 1039+ messages in thread From: Julien Rouhaud @ 2020-02-20 13:52 UTC (permalink / raw) To: Amit Langote <[email protected]>; +Cc: Etsuro Fujita <[email protected]>; PostgreSQL Hackers <[email protected]> On Thu, Feb 20, 2020 at 09:38:26PM +0900, Amit Langote wrote: > Fujita-san, > > On Thu, Feb 20, 2020 at 8:36 PM Etsuro Fujita <[email protected]> wrote: > > partition_bounds_copy() sets the hash_part and natts variable in each > > iteration of a loop to copy the datums in the datums array, which > > would not be efficient. Attached is small patch for avoiding that. > > That looks good to me. Looks good to me too! ^ permalink raw reply [nested|flat] 1039+ messages in thread
* Re: Minor improvement to partition_bounds_copy() @ 2020-02-21 11:06 Etsuro Fujita <[email protected]> parent: Julien Rouhaud <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Etsuro Fujita @ 2020-02-21 11:06 UTC (permalink / raw) To: Julien Rouhaud <[email protected]>; +Cc: Amit Langote <[email protected]>; PostgreSQL Hackers <[email protected]> On Thu, Feb 20, 2020 at 10:52 PM Julien Rouhaud <[email protected]> wrote: > On Thu, Feb 20, 2020 at 09:38:26PM +0900, Amit Langote wrote: > > On Thu, Feb 20, 2020 at 8:36 PM Etsuro Fujita <[email protected]> wrote: > > > partition_bounds_copy() sets the hash_part and natts variable in each > > > iteration of a loop to copy the datums in the datums array, which > > > would not be efficient. Attached is small patch for avoiding that. > > > > That looks good to me. > > Looks good to me too! Pushed. Thanks, Amit and Julien! Best regards, Etsuro Fujita ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1039+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1039+ messages in thread
end of thread, other threads:[~2026-05-14 03:05 UTC | newest] Thread overview: 1039+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2020-02-20 11:36 Minor improvement to partition_bounds_copy() Etsuro Fujita <[email protected]> 2020-02-20 12:38 ` Amit Langote <[email protected]> 2020-02-20 13:52 ` Julien Rouhaud <[email protected]> 2020-02-21 11:06 ` Etsuro Fujita <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid 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