agora inbox for [email protected]help / color / mirror / Atom feed
[PATCH v3 5/7] Row pattern recognition patch (docs). 1034+ messages / 2 participants [nested] [flat]
* [PATCH v3 5/7] Row pattern recognition patch (docs). @ 2023-07-26 10:49 Tatsuo Ishii <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Tatsuo Ishii @ 2023-07-26 10:49 UTC (permalink / raw) --- doc/src/sgml/advanced.sgml | 52 ++++++++++++++++++++++++++++++++++ doc/src/sgml/func.sgml | 54 ++++++++++++++++++++++++++++++++++++ doc/src/sgml/ref/select.sgml | 29 +++++++++++++++++-- 3 files changed, 133 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/advanced.sgml b/doc/src/sgml/advanced.sgml index 755c9f1485..eda3612822 100644 --- a/doc/src/sgml/advanced.sgml +++ b/doc/src/sgml/advanced.sgml @@ -537,6 +537,58 @@ WHERE pos < 3; <literal>rank</literal> less than 3. </para> + <para> + Row pattern common syntax can be used with row pattern common syntax to + perform row pattern recognition in a query. Row pattern common syntax + includes two sub clauses. <literal>DEFINE</literal> defines definition + variables along with an expression. The expression must be a logical + expression, which means it must + return <literal>TRUE</literal>, <literal>FALSE</literal> + or <literal>NULL</literal>. Moreover if the expression comprises a column + reference, it must be the argument of <function>rpr</function>. An example + of <literal>DEFINE</literal> is as follows. + +<programlisting> +DEFINE + LOWPRICE AS price <= 100, + UP AS price > PREV(price), + DOWN AS price < PREV(price) +</programlisting> + + Note that <function>PREV</function> returns price column in the previous + row if it's called in a context of row pattern recognition. So in the + second line means the definition variable "UP" is <literal>TRUE</literal> + when price column in the current row is greater than the price column in + the previous row. Likewise, "DOWN" is <literal>TRUE</literal> when when + price column in the current row is lower than the price column in the + previous row. + </para> + <para> + Once <literal>DEFINE</literal> exists, <literal>PATTERN</literal> can be + used. <literal>PATTERN</literal> defines a sequence of rows that satisfies + certain conditions. For example following <literal>PATTERN</literal> + defines that a row starts with the condition "LOWPRICE", then one or more + rows satisfy "UP" and finally one or more rows satisfy "DOWN". If a + sequence of rows found, rpr returns the column at the starting row. + Example of a <literal>SELECT</literal> using the <literal>DEFINE</literal> + and <literal>PATTERN</literal> clause is as follows. + +<programlisting> +SELECT company, tdate, price, max(price) OVER w FROM stock + WINDOW w AS ( + PARTITION BY company + ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING + AFTER MATCH SKIP PAST LAST ROW + INITIAL + PATTERN (LOWPRICE UP+ DOWN+) + DEFINE + LOWPRICE AS price <= 100, + UP AS price > PREV(price), + DOWN AS price < PREV(price) +); +</programlisting> + </para> + <para> When a query involves multiple window functions, it is possible to write out each one with a separate <literal>OVER</literal> clause, but this is diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index dcc9d6f59d..b333d62410 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -21714,6 +21714,7 @@ SELECT count(*) FROM sometable; returns <literal>NULL</literal> if there is no such row. </para></entry> </row> + </tbody> </tgroup> </table> @@ -21753,6 +21754,59 @@ SELECT count(*) FROM sometable; Other frame specifications can be used to obtain other effects. </para> + <para> + Row pattern recognition navigation functions are listed in + <xref linkend="functions-rpr-navigation-table"/>. These functions + can be used to describe DEFINE clause of Row pattern recognition. + </para> + + <table id="functions-rpr-navigation-table"> + <title>Row Pattern Navigation Functions</title> + <tgroup cols="1"> + <thead> + <row> + <entry role="func_table_entry"><para role="func_signature"> + Function + </para> + <para> + Description + </para></entry> + </row> + </thead> + + <tbody> + <row> + <entry role="func_table_entry"><para role="func_signature"> + <indexterm> + <primary>prev</primary> + </indexterm> + <function>prev</function> ( <parameter>value</parameter> <type>anyelement</type> ) + <returnvalue>anyelement</returnvalue> + </para> + <para> + Returns the column value at the previous row; + returns NULL if there is no previous row in the window frame. + </para></entry> + </row> + + <row> + <entry role="func_table_entry"><para role="func_signature"> + <indexterm> + <primary>next</primary> + </indexterm> + <function>next</function> ( <parameter>value</parameter> <type>anyelement</type> ) + <returnvalue>anyelement</returnvalue> + </para> + <para> + Returns the column value at the next row; + returns NULL if there is no next row in the window frame. + </para></entry> + </row> + + </tbody> + </tgroup> + </table> + <note> <para> The SQL standard defines a <literal>RESPECT NULLS</literal> or diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml index 0ee0cc7e64..16478a3950 100644 --- a/doc/src/sgml/ref/select.sgml +++ b/doc/src/sgml/ref/select.sgml @@ -966,8 +966,8 @@ WINDOW <replaceable class="parameter">window_name</replaceable> AS ( <replaceabl The <replaceable class="parameter">frame_clause</replaceable> can be one of <synopsis> -{ RANGE | ROWS | GROUPS } <replaceable>frame_start</replaceable> [ <replaceable>frame_exclusion</replaceable> ] -{ RANGE | ROWS | GROUPS } BETWEEN <replaceable>frame_start</replaceable> AND <replaceable>frame_end</replaceable> [ <replaceable>frame_exclusion</replaceable> ] +{ RANGE | ROWS | GROUPS } <replaceable>frame_start</replaceable> [ <replaceable>frame_exclusion</replaceable> ] [row_pattern_common_syntax] +{ RANGE | ROWS | GROUPS } BETWEEN <replaceable>frame_start</replaceable> AND <replaceable>frame_end</replaceable> [ <replaceable>frame_exclusion</replaceable> ] [row_pattern_common_syntax] </synopsis> where <replaceable>frame_start</replaceable> @@ -1074,6 +1074,31 @@ EXCLUDE NO OTHERS a given peer group will be in the frame or excluded from it. </para> + <para> + The + optional <replaceable class="parameter">row_pattern_common_syntax</replaceable> + defines the <firstterm>row pattern recognition condition</firstterm> for + this + window. <replaceable class="parameter">row_pattern_common_syntax</replaceable> + includes following subclauses. <literal>AFTER MATCH SKIP PAST LAST + ROW</literal> or <literal>AFTER MATCH SKIP TO NEXT ROW</literal> controls + how to proceed to next row position after a match + found. With <literal>AFTER MATCH SKIP PAST LAST ROW</literal> (the + default) next row position is next to the last row of previous match. On + the other hand, with <literal>AFTER MATCH SKIP TO NEXT ROW</literal> next + row position is always next to the last row of previous + match. <literal>DEFINE</literal> defines definition variables along with a + boolean expression. <literal>PATTERN</literal> defines a sequence of rows + that satisfies certain conditions using variables defined + in <literal>DEFINE</literal> clause. + +<synopsis> +[ AFTER MATCH SKIP PAST LAST ROW | AFTER MATCH SKIP TO NEXT ROW ] +PATTERN <replaceable class="parameter">pattern_variable_name</replaceable>[+] [, ...] +DEFINE <replaceable class="parameter">definition_varible_name</replaceable> AS <replaceable class="parameter">expression</replaceable> [, ...] +</synopsis> + </para> + <para> The purpose of a <literal>WINDOW</literal> clause is to specify the behavior of <firstterm>window functions</firstterm> appearing in the query's -- 2.25.1 ----Next_Part(Wed_Jul_26_21_21_34_2023_317)-- Content-Type: Text/X-Patch; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="v3-0006-Row-pattern-recognition-patch-tests.patch" ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
* [PATCH v1 1/1] teach vacuumlo to handle domains over oid @ 2026-05-14 03:05 Nathan Bossart <[email protected]> 0 siblings, 0 replies; 1034+ messages in thread From: Nathan Bossart @ 2026-05-14 03:05 UTC (permalink / raw) --- contrib/vacuumlo/vacuumlo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 8102569466b..230f6958fc1 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -191,13 +191,25 @@ vacuumlo(const char *database, const struct _param *param) * delete... */ buf[0] = '\0'; + if (PQserverVersion(conn) >= 140000) + strcat(buf, "WITH RECURSIVE cte AS " + "(SELECT oid AS oid2, oid, typname, typbasetype FROM pg_type " + "UNION ALL " + "SELECT t2.oid2, t.oid, t.typname, t.typbasetype FROM pg_type t " + "JOIN cte t2 ON t.oid = t2.typbasetype) "); strcat(buf, "SELECT s.nspname, c.relname, a.attname "); strcat(buf, "FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, ", cte "); strcat(buf, "WHERE a.attnum > 0 AND NOT a.attisdropped "); strcat(buf, " AND a.attrelid = c.oid "); strcat(buf, " AND a.atttypid = t.oid "); strcat(buf, " AND c.relnamespace = s.oid "); - strcat(buf, " AND t.typname in ('oid', 'lo') "); + if (PQserverVersion(conn) >= 140000) + strcat(buf, " AND t.oid = cte.oid2 " + " AND cte.typname = 'oid' "); + else + strcat(buf, " AND t.typname in ('oid', 'lo') "); strcat(buf, " AND c.relkind in (" CppAsString2(RELKIND_RELATION) ", " CppAsString2(RELKIND_MATVIEW) ")"); strcat(buf, " AND s.nspname !~ '^pg_'"); res = PQexec(conn, buf); -- 2.50.1 (Apple Git-155) --K++Jp4URl2Oj0VAw-- ^ permalink raw reply [nested|flat] 1034+ messages in thread
end of thread, other threads:[~2026-05-14 03:05 UTC | newest] Thread overview: 1034+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2023-07-26 10:49 [PATCH v3 5/7] Row pattern recognition patch (docs). Tatsuo Ishii <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid Nathan Bossart <[email protected]> 2026-05-14 03:05 [PATCH v1 1/1] teach vacuumlo to handle domains over oid 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